package com.xquant.trade.trade.service;

import com.xquant.trade.trade.entity.Trade;
import com.xquant.trade.utils.CommResponse;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

/**
 * newCloud 交易接口
 */
public interface TradeService {
    /**
     * 交易类型  场内对冲交易   "LongOpen",  "LongClose", "ShortOpen",  "ShortClose"
     * 交易类型  场外期权交易  "OtcOptionBuy",   "OtcOptionSell"
     */
    String[] getTradeTypes();

    /**
     * 交易前 数据准备  【场内交易、期权交易】
     */
    void prepareTrade(Trade trade);

    /**
     * 检查 交易数据  【场内交易、期权交易】
     */
    CommResponse checkTrade(Trade trade);

    /**
     * 检查 交易日期  【场内交易、期权交易】
     */
    CommResponse checkTradeDate(Trade trade);

    /**
     * 新增 交易  【场内交易、期权交易】
     */
    CommResponse insertTrade(Trade trade);

    /**
     * 更新 交易  【场内交易、期权交易】
     */
    CommResponse updateTrade(Trade trade);

    /**
     * 成交确认 交易  【场内交易、期权交易】
     */
    CommResponse confirmTrade(Trade trade);

    /**
     * 删除 交易  【场内交易、期权交易】
     */
    void deleteTrade(Trade trade);

    /**
     * 检查 撤单交易   【场内交易、期权交易】
     */
    public CommResponse checkRevertTrade(Trade trade);

    /**
     * 撤单 交易   【场内交易、期权交易】
     */
    public void revertTrade(Trade trade);

    /**
     * 交易保存前转换   【场内交易】
     */
    Trade tranferTrade(Trade trade);

    /**
     * 交易 导入   【场内交易】
     */
    CommResponse importTrades(HttpServletRequest request, MultipartFile cmf, String tradeType, Map validMap);

    /**
     * 交易 导入字段列表   【场内交易】
     */
    List getTradeColumnCfglist();

    /**
     * 审批前校验 交易   【场内交易、期权交易】
     */
    CommResponse checkBeforeApproval(Trade trade, Map<String, Map> map);
}
